package cn.bocai.pc.service.impl;

import java.io.File;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import cn.bocai.pc.dao.BcPictureMapper;
import cn.bocai.pc.dao.BcThumpicMapper;
import cn.bocai.pc.dao.VariableMapper;
import cn.bocai.pc.model.BcPicture;
import cn.bocai.pc.model.BcThumpic;
import cn.bocai.pc.service.BcPictureService;
import cn.bocai.pc.util.FMutil;
import cn.bocai.pc.util.UUIDUtils;
/** 
 * @className: BcPictureService
 * @description: 图片描述祥情
 * @date: 2015年06月26日 下午6:20:31
 * @explain :
 * 
 * @修改人：
 * @修改时间：
 * @修改内容：
 */
@Service
public class BcPictureServiceImpl implements BcPictureService {
	//图片信息
	@Autowired
	BcPictureMapper bcPictureMapper ;
	//缩略图信息
	@Autowired
	BcThumpicMapper bcThumpicMapper;
	//数据字典
	@Autowired
	private  VariableMapper variableDao;

	public int deleteByPrimaryKey(String id) {
		// TODO Auto-generated method stub
		return 0;
	}

	public int insert(BcPicture record) {
		// TODO Auto-generated method stub
		return 0;
	}

	public int insertSelective(BcPicture record) {
		// TODO Auto-generated method stub
		return 0;
	}

	public BcPicture selectByPrimaryKey(String id) {
		// TODO Auto-generated method stub
		return null;
	}

	public int updateByPrimaryKeySelective(BcPicture record) {
		// TODO Auto-generated method stub
		return 0;
	}

	public int updateByPrimaryKeyWithBLOBs(BcPicture record) {
		// TODO Auto-generated method stub
		return 0;
	}

	public int updateByPrimaryKey(BcPicture record) {
		// TODO Auto-generated method stub
		return 0;
	}
	/**
	 * 通过图片名称，生成图片信息
	 * @param list  图片信息
	 * @param year 年份
	 * @param colour 颜色
	 * @param periods 期数
	 * @return 成功信息，或日志
	 * @author 99fu
	 * @time 2015/07/02
	 */
	public Map scanStorageByThumpic(List<String> list,String year,String colour,String periods) {
		int sum=0;
		//区分颜色
		String col="col".equals(colour)?"1":"0";
		Map<String,Object> map=new HashMap<String,Object>();
		//先删除再增加
		BcPicture bcPicture = new BcPicture();
			bcPicture.setYear(year);
			bcPicture.setColour(col);
			bcPicture.setPeriods(periods);
		 map.put("bcPicture", bcPicture);
		bcPictureMapper.deleteByDatas(map);
		
		if(list.size()>0){
			//得到所有的图片名称
			  for (String img : list) {
				  /*String picName;*/
				  int index=img.indexOf(".");
				  String picname = img.substring(0,index);//图片名称描述
				  
				  //查询缩略图信息
				 Map<String,Object> pic= new HashMap<String,Object>();
				 pic.put("picname", picname);
				 pic.put("colour", col);
				  //回去改图片信息
				 BcThumpic bcThumpic=  bcThumpicMapper.selectThumpicByImgName(pic);
				  //取缩略图里的信息
				if(bcThumpic!=null){
					 /*picName=bcThumpic.getPicname();//名称*/
					 String desctibe = bcThumpic.getDesctibe();//描述
					 String tid=bcThumpic.getId();//id 
					 Integer order = bcThumpic.getFeatureSort();//顺序
					 
					 //将图片描述信息插入表中
					 BcPicture picture = new BcPicture();
					  picture.setYear(year);//设置年份
					  picture.setId(UUIDUtils.getUUID32());
					  picture.setColour(col);//颜色1彩图  0黑白
					  picture.setPeriods(periods);//设置期数
					  picture.setIsShow("1");//是否显示  1为显示
					  picture.setPicname(picname);//设置图片的名字
					  picture.setDesctibe(desctibe);//设置中文名称
					  picture.setThumpicId(tid);//缩略图id
					  picture.setUrladdress("/"+year+"/"+colour+"/"+periods+"/"+img);//图片的路径
					  picture.setRemarks1("/"+year+"/"+colour+"/"+picname+".html");//静态页面地址
					  picture.setRemarks2(order);//排序
					  //入库操作
					  bcPictureMapper.insert(picture);
					  sum++;
				}
				//清空零时数据
				 map.clear();
				//做重复扫描判断
				 map.put("sum", sum);
			}
		}
		//生成静态页面
		Integer creatHtml = creatHtml(year,colour,periods);
		map.put("creatHtml", creatHtml);
		//返回扫描成功数量
		return map;
	}
	/**
	 * 扫描完成后， 生成html静态页
	 * @param year
	 * @param colour
	 * @param periods
	 */
	private Integer creatHtml(String year, String colour, String periods) {
		Integer sumHtml=0;
			try {
				Map<String,Object> map=new HashMap<String,Object>();
				FMutil fMutil = new FMutil();
				map.put("publicYear", year);
				//某一期数下所有图片
				List<BcPicture> list=this.selectPictureByDatas(year, colour, periods);
				/*for (BcPicture bcPicture : list) {*/
				String PackPath = variableDao.selectVariable("PACKGE_TEMPLATE");//模板地址
				String imagPath = variableDao.selectVariable("IMG_URL");//图片映射地址
				String HtmlPath = variableDao.selectVariable("HTML_RELATIVEPATH");//生成静态html模板存放地址
				map.put("imagPath", imagPath);//图片映射地址
			    for(int i = 0;i < list.size(); i ++){
			    	BcPicture bcPicture=list.get(i);
					String colour2 = bcPicture.getColour();
					//在同一年份下同一颜色同一名称的图片集合（模板展示）
					Map<String, Object> bcPicMap = new HashMap<String,Object>();
						bcPicMap.put("year",year);
						bcPicMap.put("colour",bcPicture.getColour());
						bcPicMap.put("picname",bcPicture.getPicname());
					List<BcPicture> listPic=this.selectPictureByName(bcPicMap);
					map.put("listPic", listPic);
					//转成目录
					String scolor="1".equals(colour2)?"col":"black";
					//静态路径 
					String relativePath="/"+year+"/"+scolor;
					
					
					/*int intValue = bcPicture.getRemarks2().intValue();*///获取当个图片的排序
					//设置查询
					Map<String,Object> hashMap = new HashMap<String,Object>();
					
					hashMap.put("colour",colour2);//区分字段
					BcThumpic upBcThumpic = new BcThumpic();//创建略缩图对象
					//判断当排序为0的时候说明已经是第一个了
					if(i==0){
						upBcThumpic.setDesctibe("0");//设置为0前段根据改值进行判断
						map.put("upPage",upBcThumpic);
					}else{
						hashMap.put("sort",i-1);//排序
						BcThumpic upPage=bcThumpicMapper.selectBefore(hashMap);
						map.put("upPage",upPage);
					}
					
					
					int searThumAllRowAll = bcThumpicMapper.searThumAllRowAll(colour2);//查询出所有的数量
					BcThumpic bcThumpic = new BcThumpic();
					if(searThumAllRowAll-1==i){
						bcThumpic.setDesctibe("0");
						map.put("downPage",bcThumpic);
					}else{
						hashMap.put("sort",i+1);//排序
						BcThumpic after=bcThumpicMapper.selectBefore(hashMap);//查出下一张的信息
						/*if(null==after){
							System.out.println("11111");
						}*/
						map.put("downPage",after);
					}
					map.put("scolor", scolor);//转换的目录
					map.put("bcPicture", bcPicture);//当前图片属性信息
					
					//html名称
					String picname=bcPicture.getPicname();
					if(0==i){
						//如果没有目录创建
						isDirectory(HtmlPath+relativePath);
					}
					//生成静态页面。如名称相同覆盖
				fMutil.ouputFile("pictureDescription.ftl", picname+".html",map,relativePath,PackPath,HtmlPath);
				sumHtml++;
			   } 
			    
			  //当静态页面生成以后在将彩色黑白页面生成
			    //System.out.println("-----当静态页面生成以后在将彩色黑白页面生成"+colour);
				String var=colBlackPage(colour.equals("col")?"1":"0");
				System.out.println("生成当静态页面生成以后在将彩色黑白页面生成"+var);
			}catch (Exception e) {
				e.printStackTrace();
			}
		return sumHtml;	
	}
    
	
	/*//生成首页彩色黑白静态页面(这里不生成往年的静态，如果要生成往年静态需要点击按钮生成)
	public String colBlackOnePage(String colour){
		//到数据字典去查询出对的的值
			String PackPath = variableDao.selectVariable("PACKGE_TEMPLATE");//模板地址
			String colAddress = variableDao.selectVariable("ColPage_Address"); //D:/colHtml
			String blackAddress = variableDao.selectVariable("BlackPage_Address"); //D:/blackHtml
			String porUrl=variableDao.selectVariable("POR_URL");//静态页面磁盘映射 /static
			String variable=variableDao.selectVariable("PIC_URL");//http://localhost:8081/static
			String variableYear=variableDao.selectVariable("year");//最新年份
			String staticYear=variableDao.selectVariable("picStatic_Year");//图纸开始年份
			String varHtmlUrl = variableDao.selectVariable("HTML_URL");// /pc-portal
			
			//将年份转换为int类型
			int i=Integer.parseInt(staticYear);
			int n=Integer.parseInt(variableYear);
			 String var="success";//返回上层的判断值i
			 List<String> list=new ArrayList<String>();
			for (int year= i; year <= n;year++) {
				Collections.reverse(list);//强数据反转
				if(2012!=year){
					list.add(String.valueOf(year-1));
					Collections.reverse(list);//强数据反转
				}
			    Map<String, Object> allMap = new HashMap<String, Object>();
				int searRowAll = bcThumpicMapper.searRowAll(colour);// 查询出总的行数
				String colous = "";
				String returnUrl = "";
				String typeName = "";
				String storeAddress="";
				if ("1".equals(colour)) {
					colous = "col";
					returnUrl = "/col/col.html";
					typeName = "彩色";
					 storeAddress=colAddress+"/"+year;
					if(n==year){
					 storeAddress=colAddress;
					}
				} else {
					colous = "black";
					returnUrl = "/black/black.html";
					typeName = "黑白";
					storeAddress=blackAddress+"/"+year;
					if(n==year){//当年份是当前最新年份的时候存放位置没有年份文件夹
					storeAddress=blackAddress;
					}
				}
				allMap.put("nextYear", String.valueOf(Integer.parseInt(variableYear)+1));
				allMap.put("yearList", list);// 年份集合
				allMap.put("typeName", typeName);// 中文类型名称
				allMap.put("porUrl", porUrl);
				allMap.put("url", variable);
				allMap.put("year", String.valueOf(year));
				allMap.put("colous", colous);
				allMap.put("bcUrl", varHtmlUrl);
				allMap.put("nowUrl",returnUrl);
				allMap.put("endRow", searRowAll);// 总行数
				Map<String, String> articleMap = new HashMap<String, String>();
					articleMap.put("year",String.valueOf(year));
					articleMap.put("colour", colour);
				List<Map<String, Object>> returnColOrBlack = bcPictureMapper.selectColOrBlack(articleMap);
				allMap.put("selectColOrBlack", returnColOrBlack);
				//监测文件夹是否存在，不存在就创建
				isDirectory(storeAddress);
				FMutil fMutil = new FMutil();
				// 生成静态页面。如名称相同覆盖
				try {
					fMutil.ouputLinkFile("colBlackPage.ftl", colous + ".html", allMap, "/"+ colous + ".html",PackPath,storeAddress);
				} catch (Exception e) {
					var = "erro";
					e.printStackTrace();
				}
			}
			return var;
		}
	*/
	
	
	
	//生成彩色黑白静态页面
		public String colBlackPage(String colour){
			//到数据字典去查询出对的的值
				String PackPath = variableDao.selectVariable("PACKGE_TEMPLATE");//模板地址
				String colAddress = variableDao.selectVariable("ColPage_Address"); //D:/colHtml
				String blackAddress = variableDao.selectVariable("BlackPage_Address"); //D:/blackHtml
				String porUrl=variableDao.selectVariable("POR_URL");//静态页面磁盘映射 /static
				String variable=variableDao.selectVariable("PIC_URL");//http://localhost:8081/static
				String variableYear=variableDao.selectVariable("year");//最新年份
				String staticYear=variableDao.selectVariable("picStatic_Year");//图纸开始年份
				String varHtmlUrl = variableDao.selectVariable("HTML_URL");// /pc-portal
				
				//将年份转换为int类型
				int i=Integer.parseInt(staticYear);
				int n=Integer.parseInt(variableYear);
				 String var="success";//返回上层的判断值i
				 List<String> list=new ArrayList<String>();
				for (int year= i; year <= n;year++) {
					Collections.reverse(list);//强数据反转
					if(2012!=year){
						list.add(String.valueOf(year-1));
						Collections.reverse(list);//强数据反转
					}
				    Map<String, Object> allMap = new HashMap<String, Object>();
					int searRowAll = bcThumpicMapper.searRowAll(colour);// 查询出总的行数
					String colous = "";
					String returnUrl = "";
					String typeName = "";
					String storeAddress="";
					if ("1".equals(colour)) {
						colous = "col";
						returnUrl = "/col/col.html";
						typeName = "彩色";
						 storeAddress=colAddress+"/"+year;
						if(n==year){
						 storeAddress=colAddress;
						}
					} else {
						colous = "black";
						returnUrl = "/black/black.html";
						typeName = "黑白";
						storeAddress=blackAddress+"/"+year;
						if(n==year){//当年份是当前最新年份的时候存放位置没有年份文件夹
						storeAddress=blackAddress;
						}
					}
					allMap.put("nextYear", String.valueOf(Integer.parseInt(variableYear)+1));
					allMap.put("yearList", list);// 年份集合
					allMap.put("typeName", typeName);// 中文类型名称
					allMap.put("porUrl", porUrl);
					allMap.put("url", variable);
					allMap.put("year", String.valueOf(year));
					allMap.put("colous", colous);
					allMap.put("bcUrl", varHtmlUrl);
					allMap.put("nowUrl",returnUrl);
					allMap.put("endRow", searRowAll);// 总行数
					Map<String, String> articleMap = new HashMap<String, String>();
						articleMap.put("year",String.valueOf(year));
						articleMap.put("colour", colour);
					List<Map<String, Object>> returnColOrBlack = bcPictureMapper.selectColOrBlack(articleMap);
					allMap.put("selectColOrBlack", returnColOrBlack);
					//监测文件夹是否存在，不存在就创建
					isDirectory(storeAddress);
					FMutil fMutil = new FMutil();
					// 生成静态页面。如名称相同覆盖
					try {
						fMutil.ouputLinkFile("colBlackPage.ftl", colous + ".html", allMap, "/"+ colous + ".html",PackPath,storeAddress);
					} catch (Exception e) {
						var = "erro";
						e.printStackTrace();
					}
				}
				return var;
			}
	
	
	// 判断文件夹是否存在，不存在就创建
	public void isDirectory(String path) {
		File file = new File(path);
		// 查找指定目录下的文件
		if (!file.exists() || !file.isDirectory()) {
			System.out.println("目录不存在");
			file.mkdirs();// 不存在就创建 (可以创建多级目录)
		}
	}
	
	
    /**
     * 删除文件夹下的所有文件
     * @param oldPath
     */
    public void deleteFile(File oldPath) {
          if (oldPath.isDirectory()) {
           System.out.println(oldPath + "是文件夹--");
           File[] files = oldPath.listFiles();
           for (File file : files) {
             deleteFile(file);
           }
          }else{
            oldPath.delete();
          }
        }
	
	
	/**
	 * 查询某个图片下的期数集合
	 * @param bcPicture
	 * @return
	 */
private List<BcPicture> selectPictureByName(Map<String, Object> bcPicture) {
	// 先查询所有当期符合条件图片信息
			List<BcPicture> list = bcPictureMapper.selectPictureByName(bcPicture);
			return list;
	}

/**
 * 通过图片信息，查出所有当期颜色的图片信息
 * @param year
 * @param colour
 * @param periods
 * @return
 */
	public List<BcPicture> selectPictureByDatas(String year, String colour, String periods){
		Map<String,Object> map=new HashMap<String,Object>();
			BcPicture bcPicture = new BcPicture();
			bcPicture.setYear(year);
			bcPicture.setColour("col".equals(colour)?"1":"0");
			bcPicture.setPeriods(periods);
		map.put("bcPicture", bcPicture);
		// 先查询所有当期符合条件图片信息
		List<BcPicture> list = bcPictureMapper.selectPictureListByDatas(map);
		return list;
	}
	
	/**
	 * 查询出彩色或黑白图的最新第一条数据
	 * @param colour 传输过来的判别图片类型的字符
	 * @return
	 */
	public BcPicture selectArticleOne(String colour) {
		
		return bcPictureMapper.selectArticleOne(colour);
	}
	
	/**
	 * 查询所有关联小图的彩色或黑白图的数据
	 * @param colBla 传输过来的是一个map值有三个参数
	 * @return
	 */
	public List<Map<String, Object>> selectColOrBlack(Map<String,String> colBla) {
		List<Map<String, Object>> selectColOrBlack = bcPictureMapper.selectColOrBlack(colBla);
		return selectColOrBlack;
	}
	/**
	 * 查询出收藏表中的指定略缩id和年份的所有数据
	 * @param colBla 传输参数
	 * @return List<BcPicture>
	 */
	public List<BcPicture> selectAllPeriods(Map<String,String> map){
		List<BcPicture> selectAllPeriods = bcPictureMapper.selectAllPeriods(map);
		return selectAllPeriods;
	}
	
	/**
	 * 后台：查询出指定年份和日期中期数最大的数据
	 * @return String
	 */
	public String selectPeriods(Map<String,Object> map){
		String selectPeriods = bcPictureMapper.selectPeriods(map);
		return selectPeriods;
	}

}
